import time
import math

def is_prime_trial(n):
    """
    试除法判断一个数是否为素数（基础版本）
    :param n: 待判断的正整数
    :return: True（是素数）/False（不是素数）
    """
    if n <= 1:
        return False
    if n == 2:  # 2是唯一的偶素数，单独处理
        return True
    if n % 2 == 0:  # 排除所有偶数
        return False
    # 只需检查3到sqrt(n)之间的奇数（减少一半计算量）
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True

def print_primes_between_1_and_20000():
    """输出1~20000内的所有素数，每行5个"""
    primes = []
    start_time = time.time()  # 记录开始时间
    
    # 遍历1~20000，筛选素数
    for num in range(1, 20001):
        if is_prime_trial(num):
            primes.append(num)
    
    end_time = time.time()  # 记录结束时间
    total_time = end_time - start_time
    
    # 按每行5个打印素数
    for i in range(len(primes)):
        print(f"{primes[i]:6}", end="")  # 格式化输出，占6个字符宽度（对齐）
        if (i + 1) % 5 == 0:  # 每5个换行
            print()
    
    # 输出统计信息
    print(f"\n1~20000内共有{len(primes)}个素数")
    print(f"程序执行总时间：{total_time:.4f}秒")
    print("最费时函数：is_prime_trial（试除法对每个数单独判断，重复计算多）")

# 执行程序
print_primes_between_1_and_20000()